package org.sf.comp.tagging;


import java.util.List;

/**
 * 
 * A Tag both marks one or more other objects, including other Tags.
 *
 */
public interface Tag {
	/**
	 * 
	 * @return  Readable name of the tag, such as "photos"
	 */
	String getName();
	
	/**
	 * 
	 * @param name	Whatever you want the readable name to be...
	 */
	void setName(String name);
	
	/**
	 * 
	 * @param o	Objects you want to tag, including other tags.
	 */
	void associate(Object... o);
	
	/**
	 * 
	 * @param o	Objects you want to untag.
	 */
	void disassociate(Object... o);
	
	/**
	 * 
	 * @return	all the objects currently tagged.
	 */
	List<Object> listAssociated();

}
